package com.jie.creator.singleton.demo09;

import java.io.Serializable;

/**
 * @description:懒汉式:静态内部类
 * @author: jie
 * @time: 2022/1/29 17:47
 */
public class Singleton implements Serializable {

    private static boolean flag = false;

    /**
     * @description:私有构造方法，避免外部创建对象
     */
    private Singleton() {
        synchronized (Singleton.class) {
            //判断flag的值是否是true，如果是true,说明不是第一次访问,直接抛一个异常 ,如果是false，说明第一次访问。
            if (flag) {
                throw new RuntimeException("不能创建多个对象");
            }
            //将flag设置为true
            flag = true;
        }
    }
    /**
     * @description:定义一个静态内部类
     */
    private static class SingletonHolder {
        //在内部类中声明并初始化外部类的对象
        private static final Singleton INSTANCE = new Singleton();
    }

    /**
     * @description:对外提供静态方法获取该对象
     */
    public static Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}